新涉及到的注解 @Override @Autowired

@Override 注解

作用和功能:

  • @Override 是 Java 自带的注解,用来标识一个方法是从父类或接口中继承或实现的。它是编译时的注解,表示被标注的方法是对父类或接口方法的重写。
  • 当你使用 @Override 注解时,Java 编译器会检查你是否正确重写了父类的方法。如果方法签名不匹配,编译器会报错。

主要用途:

  • 增强代码的可读性:清楚地表明方法是重写的。
  • 提供编译时的错误检查,防止由于方法名拼写错误或参数类型不匹配导致的问题。

示例:

public class Parent {

    public void display() {

        System.out.println("Display in Parent");

    }

}

public class Child extends Parent {

    @Override // 表示重写父类的 display() 方法

    public void display() {

        System.out.println("Display in Child");

    }

}

如果在 Child 类中的 display 方法没有正确地覆盖 Parent 类的方法,而你加上了 @Override 注解,编译器就会报错。这有助于避免无意中写错方法名或参数类型。

@Autowired 注解

作用和功能:

  • @Autowired 是 Spring 框架中的注解,用于自动注入依赖。它可以在字段(成员变量)、构造器、setter 方法上使用。
  • 当使用 @Autowired 注解时,Spring 会自动在容器中寻找匹配的 Bean 并注入到被标注的字段或方法中。这种依赖注入(DI, Dependency Injection)是 Spring 的核心特性之一。

自动注入的规则:

  • Spring 会通过类型(by type)来查找匹配的 Bean。如果找到多个同类型的 Bean,可以通过 @Qualifier 指定 Bean 的名称。
  • 如果没有找到合适的 Bean,或者找到多个而不明确时,会报出 NoSuchBeanDefinitionExceptionNoUniqueBeanDefinitionException

示例:

  1. 字段注入

    @Service
    
    public class UserService {
    
        @Autowired
    
        private UserRepository userRepository; // 自动注入 UserRepository 对象
    
        // ...
    
    }
    
  2. 构造器注入(推荐使用):

    @Service
    
    public class UserService {
    
        private final UserRepository userRepository;
    
        @Autowired
    
        public UserService(UserRepository userRepository) {
    
            this.userRepository = userRepository;
    
        }
    
        // ...
    
    }
    

    使用构造器注入,可以让依赖注入在实例化时完成,有助于创建不可变对象,并且更易于单元测试。

  3. Setter 方法注入

    @Service
    
    public class UserService {
    
        private UserRepository userRepository;
    
        @Autowired
    
        public void setUserRepository(UserRepository userRepository) {
    
            this.userRepository = userRepository;
    
        }
    
        // ...
    
    }
    

@Autowired 的优势:

  • 使得类与类之间的依赖关系更加清晰。
  • 提高代码的可维护性,使得更容易进行模块的单独测试和维护。
  • 通过依赖注入,可以更好地实现面向接口编程和解耦合。

总结:

  • @Override 主要用于重写父类或接口中的方法,并进行编译时检查。
  • @Autowired 用于在 Spring 中自动注入依赖对象,使得类之间的依赖关系更清晰、更易维护。

项目分区导航处理http请求的注解 ⬅️ | 07-新涉及到的注解 @Override @Autowired | ➡️ 关于pom.xml